Manufacturers often provide customers with numerous choices regarding features and attributes of products, thereby providing the customer with a greater flexibility when ordering products to meet their individual needs. The specific combination of product attributes, as selected by the customer, is typically referred to as the “product configuration”, hereafter simply referred to as the “configuration”. As the number of choices given to the customer increases, so does the complexity surrounding the configuration. The selection of a particular attribute may require or forbid the selection of other attributes. For example, when ordering a configurable bicycle a customer may select a mountain biking package. The selection of that package may mandate the selection of a particular heavy duty suspension system, while simultaneously prohibiting the selection of a particular street suspension system. The guidelines that govern the selection of the configuration are collectively referred to as “rules”. The difficulty in managing the selections, rules and other information associated with a particular configuration can become quite overwhelming. Thus, the need for a product configuration system, commonly referred to as a “configurator”, to automate the process.
The product configuration system should also utilize a “meaningful model number”, that is, a model number where each character is related to a particular attribute of the product. Examples of the types of attributes that may be represented by model number characters include: an option package, a part dimension, a product color, etc. Identical configurations, therefore, will share a common meaningful model number. Though prior art product configuration systems are known to utilize meaningful model numbers, there is still room for improvement.
For instance, one area of improvement involves the degree of automation. Some prior art product configuration systems are partially automated, such that certain portions of the configuration process are automated and others are not. Each portion of the configuration process that must be manually executed provides an opportunity for human error. Thus, it would be advantageous to increase the degree of automation for such a system. For example, a customer making product selections via the company's website, could use a highly automated product configuration system to immediately determine if a particular product configuration was available, what materials are needed, how much the configuration costs, and pass the order directly from the customer to the manufacturing site.
Another area of improvement involves the issue of compatibility. It is desirable that a product configuration system be flexible and compatible such that it may interact with a variety of systems. For example, a company may employ various software applications, such as software for generating a bill of material or for placing orders over the Internet, and the product configuration system should be compatible with all of them.
Moreover, there is the issue of complexity. Traditionally, product configuration system utilized overwhelming amounts of “logic code” in order to accomplish the tasks required of them. This resulted in a system where the logic, typically in the form of endless if-then type statements, and the data, usually constituting gigantic databases and look-up tables, were two separate entities. Each of these entities was very difficult and time consuming to manage. In contrast, “object-oriented” product configuration systems are organized as a collection of sub-objects, wherein the logic and data are one. Systems of this type also allow for the shared use of logic and data, such that a single product configuration system could provide information to a whole host of different applications. In the past, separate product configuration systems would need to be developed for each application requesting information.
Therefore, it would be advantageous to provide an improved product configuration system that utilized a meaningful model number, was fully automated, was compatible with numerous types of software applications, and was object-oriented such that it reduced the complexity of the system by making shared use of the logic and data.